#!/usr/bin/env python3
"""
测试tree日志功能的脚本
"""

import sys
import os
import logging
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from src.index_tree import IndexTree
from src.logging import get_logger


# 配置测试用的logger
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(name)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)
test_logger = logging.getLogger("tree_test")


def test_tree_logging():
    """测试tree日志功能"""
    test_logger.info("=== 测试Tree日志功能 ===")
    
    # 创建被测试的logger
    tree_logger = get_logger("test_tree_logging")
    tree_logger.info("开始测试tree日志功能")
    
    # 创建IndexTree
    tree = IndexTree(block_size=4)
    tree_logger.info("创建了IndexTree，block_size=4")
    
    test_logger.info("1. 测试插入根节点")
    tree.insert_node([1, 2, 3, 4], None, 1001)
    
    test_logger.info("2. 测试插入子节点")
    tree.insert_node([5, 6, 7, 8], 1001, 1002)
    tree.insert_node([9, 10, 11, 12], 1001, 1003)
    
    test_logger.info("3. 测试插入更深层节点")
    tree.insert_node([13, 14, 15, 16], 1002, 1004)
    tree.insert_node([17, 18, 19, 20], 1002, 1005)
    
    test_logger.info("4. 测试插入长token列表")
    tree.insert_node([21, 22, 23, 24, 25, 26, 27, 28, 29, 30], 1003, 1006)
    
    test_logger.info("5. 测试删除节点")
    tree.delete_node(1002, 1004)  # 删除节点1004
    
    test_logger.info("6. 测试删除另一个节点")
    tree.delete_node(1001, 1003)  # 删除节点1003（包括其子节点1006）
    
    test_logger.info("7. 测试token匹配")
    match_size = tree.match_token_size([1, 2, 3, 4, 5, 6, 7, 8])
    tree_logger.info("Token匹配测试完成", match_size=match_size)
    
    tree_logger.info("Tree日志功能测试完成")
    test_logger.info("=== 测试完成 ===")


def test_config_options():
    """测试不同配置选项"""
    test_logger.info("=== 测试配置选项 ===")
    
    from src.utils.tree_visualizer import TreeVisualizer
    
    # 创建可视化器
    visualizer = TreeVisualizer()
    
    # 测试token格式化
    test_logger.info("测试token格式化:")
    
    # 短token列表
    short_tokens = [1, 2, 3]
    test_logger.info("短token列表 %s: %s", short_tokens, visualizer.format_tokens(short_tokens))
    
    # 正好等于显示长度的token列表
    exact_tokens = [1, 2, 3, 4, 5]
    test_logger.info("正好5个token %s: %s", exact_tokens, visualizer.format_tokens(exact_tokens))
    
    # 超过显示长度的token列表
    long_tokens = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    test_logger.info("长token列表 %s: %s", long_tokens, visualizer.format_tokens(long_tokens))
    
    test_logger.info("=== 配置测试完成 ===")


if __name__ == "__main__":
    # 首先测试配置选项
    test_config_options()
    
    # 然后测试完整的tree日志功能
    test_tree_logging()